package daily.nov;

import java.util.*;

public class lc3318 {
    /*
    有一定思路，独立实现了一部分，但是后续在进行频率比较处有问题，由deepseek帮助完成。有一定难度
     */
    public int[] findXSum(int[] nums, int k, int x) {
        int n = nums.length;
        int[] res = new int[n - k + 1];

        for (int i = 0; i < n - k + 1; i++) {
            // 统计当前窗口内数字的频率
            Map<Integer, Integer> freqMap = new HashMap<>();
            for (int j = i; j < i + k; j++) {
                freqMap.put(nums[j], freqMap.getOrDefault(nums[j], 0) + 1);
            }

            // 按频率降序排序，频率相同按数字降序排序
            List<Map.Entry<Integer, Integer>> sortedEntries = new ArrayList<>(freqMap.entrySet());
            sortedEntries.sort((a, b) -> {
                int freqCompare = b.getValue().compareTo(a.getValue());
                if (freqCompare != 0) {
                    return freqCompare;
                }
                return b.getKey().compareTo(a.getKey()); // 频率相同时数字大的优先
            });

            // 计算前x个高频数字的和
            int sum = 0;
            int count = 0;
            for (Map.Entry<Integer, Integer> entry : sortedEntries) {
                if (count >= x) break;
                // 每个数字贡献 = 数字 × 出现次数
                sum += entry.getKey() * entry.getValue();
                count++;
            }

            res[i] = sum;
        }

        return res;
    }

    public static void main(String[] args) {
        lc3318 lc3318 = new lc3318();
        int[] nums1={1,1,2,2,3,4,2,3};
        System.out.println(Arrays.toString(lc3318.findXSum(nums1, 6, 2)));
        int[] nums2={3,8,7,8,7,5};
        System.out.println(Arrays.toString(lc3318.findXSum(nums2, 2, 2)));
    }
}